package com.example.administrator.xiaoxiang.activity;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.administrator.xiaoxiang.R;
import com.example.administrator.xiaoxiang.adapter.ShopCardAdapter;
import com.example.administrator.xiaoxiang.entity.ShopingcartEntity;
import com.example.administrator.xiaoxiang.gen.DaoMaster;
import com.example.administrator.xiaoxiang.gen.ShopingcartEntityDao;
import com.yanzhenjie.recyclerview.swipe.Closeable;
import com.yanzhenjie.recyclerview.swipe.OnSwipeMenuItemClickListener;
import com.yanzhenjie.recyclerview.swipe.SwipeMenu;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;

import java.util.ArrayList;
import java.util.List;


public class ShopCardActivity extends Activity {
    private List<ShopingcartEntity> data;

    private ShopCardAdapter mMenuAdapter;
    private TextView empty;//空视图

    private SwipeMenuRecyclerView mSwipeMenuRecyclerView;
    private ShopingcartEntityDao shopingcartEntityDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shop_card);
        data = new ArrayList<>();
        initDb();

        mSwipeMenuRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.shop_card_rv);
        empty = (TextView) findViewById(R.id.shop_card_empty);
        mSwipeMenuRecyclerView.setLayoutManager(new LinearLayoutManager(this));// 布局管理器。
        mSwipeMenuRecyclerView.setHasFixedSize(true);// 如果Item够简单，高度是确定的，打开FixSize将提高性能。
        mSwipeMenuRecyclerView.setItemAnimator(new DefaultItemAnimator());// 设置Item默认动画，加也行，不加也行。
        // 为SwipeRecyclerView的Item创建菜单就两句话，不错就是这么简单：
        // 设置菜单创建器。
        mSwipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);
        // 设置菜单Item点击监听。
        mSwipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
        mMenuAdapter = new ShopCardAdapter(this, data, new ShopCardAdapter.OnMyButtonClickListener() {

            @Override
            public void addNum(int num, long _id) {
                ShopingcartEntity unique = shopingcartEntityDao.queryBuilder().where(ShopingcartEntityDao.Properties._id.eq(_id)).build().unique();
                unique.setNum(num+"");
                shopingcartEntityDao.update(unique);
            }

            @Override
            public void subNum(int num, long _id) {
                ShopingcartEntity unique = shopingcartEntityDao.queryBuilder().where(ShopingcartEntityDao.Properties._id.eq(_id)).build().unique();
                unique.setNum(num+"");
                shopingcartEntityDao.update(unique);
            }
        });

        mSwipeMenuRecyclerView.setAdapter(mMenuAdapter);

    }

    private void initDb() {
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "XX.db", null);
        SQLiteDatabase db = openHelper.getReadableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        shopingcartEntityDao = daoMaster.newSession().getShopingcartEntityDao();
        data = shopingcartEntityDao.queryBuilder().build().list();
        for (ShopingcartEntity shopingcartEntity : data) {
            Log.e("YY", "initDb: list"+shopingcartEntity.getNum());
        }
    }

    /**
     * 菜单创建器。在Item要创建菜单的时候调用。
     */
    private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
        @Override
        public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
            int width = getResources().getDimensionPixelSize(R.dimen.item_height);

            // MATCH_PARENT 自适应高度，保持和内容一样高；也可以指定菜单具体高度，也可以用WRAP_CONTENT。
            int height = ViewGroup.LayoutParams.MATCH_PARENT;

            // 添加右侧的，如果不添加，则右侧不会出现菜单。
            {
                SwipeMenuItem deleteItem = new SwipeMenuItem(getBaseContext())
                        .setBackgroundDrawable(R.drawable.selector_card)
                        .setText("删除") // 文字，还可以设置文字颜色，大小等。。
                        .setTextColor(Color.WHITE)
                        .setWidth(width)
                        .setHeight(height);
                swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。
            }
        }
    };

    /**
     * 菜单点击监听。
     */
    private OnSwipeMenuItemClickListener menuItemClickListener = new OnSwipeMenuItemClickListener() {
        /**
         * Item的菜单被点击的时候调用。
         * @param closeable       closeable. 用来关闭菜单。
         * @param adapterPosition adapterPosition. 这个菜单所在的item在Adapter中position。
         * @param menuPosition    menuPosition. 这个菜单的position。比如你为某个Item创建了2个MenuItem，那么这个position可能是是 0、1，
         * @param direction       如果是左侧菜单，值是：SwipeMenuRecyclerView#LEFT_DIRECTION，如果是右侧菜单，值是：SwipeMenuRecyclerView#RIGHT_DIRECTION.
         */
        @Override
        public void onItemClick(Closeable closeable, int adapterPosition, int menuPosition, int direction) {
            closeable.smoothCloseMenu();// 关闭被点击的菜单。
            if (menuPosition == 0) {// 删除按钮被点击。
//                mStrings.remove(adapterPosition);
                ShopingcartEntity shopingcartEntity = data.get(adapterPosition);
                ShopingcartEntity unique = shopingcartEntityDao.queryBuilder().where(ShopingcartEntityDao.Properties._id.eq(shopingcartEntity.get_id())).build().unique();
                shopingcartEntityDao.delete(unique);
                data.remove(adapterPosition);
                if (data.size()==0) {
                    empty.setVisibility(View.VISIBLE);
                }else{
                    empty.setVisibility(View.GONE);
                }
                mMenuAdapter.notifyItemRemoved(adapterPosition);
            }
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        if (data.size()==0) {
            empty.setVisibility(View.VISIBLE);
        }else{
            empty.setVisibility(View.GONE);
        }
    }

    public void click(View view) {
        finish();
    }
}
